home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / program / 483 / mkrscsrc / box.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-04-26  |  11.6 KB  |  435 lines

  1. #include "stdio.h"
  2. #include "gemdefs.h"
  3. #include "obdefs.h"
  4. #include "osbind.h"
  5. #include "mkrsc.h"
  6. #include "globals.h"
  7.  
  8.  
  9. do_boxt(result)    /* for G_BOX and G_IBOX only    */
  10.     int result;
  11. {
  12.     OBJECT    *objptr;
  13.     int i, button, nstate, nflag;
  14.     char *strptr;
  15.     COLORINT cint;
  16.     int cx, cy, cw, ch;  /* dialog box dimensions  */
  17.     long lcint, lob_spec, lthick;
  18.     int thick, sthick;
  19.  
  20.     objptr = thefrontwin->inwindow->objt;
  21.     boxt[YEXAMPLE].ob_spec = objptr[result].ob_spec;
  22.  
  23. /* deselect selectable objects in the boxt dialog box    */
  24.  
  25.     for(i=0;i<15;i++)
  26.         boxt[i].ob_state &= ~SELECTED;
  27.  
  28.     cint.whole = (int)(((long)objptr[result].ob_spec) & 0xFFFFL);
  29.     thick = (int)((((long)objptr[result].ob_spec)  >> 16) & 0x00FF);
  30. /*    if a negative one byte number then sign extend    */
  31.     if(thick & 0x80)
  32.         thick |= 0xFF00;
  33.  
  34.     strptr = boxt[YBDCOLOR].ob_spec;
  35.     sprintf(strptr,"%02d",(int)cint.part.bdcolor);
  36.     strptr = boxt[YFILL].ob_spec;
  37.     sprintf(strptr,"%02d",(int)cint.part.fillmode);
  38.     strptr = boxt[YBGCOLOR].ob_spec;
  39.     sprintf(strptr,"%02d",(int)cint.part.bgcolor);
  40.     strptr = boxt[YLINE].ob_spec;
  41.     sprintf(strptr,"%4d",thick);
  42.  
  43.     i = objptr[result].ob_state;
  44.     if(i & 2)
  45.         boxt[YCROSS].ob_state ^= SELECTED;
  46.     if(i & 4)
  47.         boxt[YCHECKED].ob_state ^= SELECTED;
  48.     if(i & 8)
  49.         boxt[YDISABLE].ob_state ^= SELECTED;
  50.     if(i & 16)
  51.         boxt[YOUTLINE].ob_state ^= SELECTED;
  52.     if(i & 32)
  53.         boxt[YSHADOW].ob_state ^= SELECTED;
  54.     
  55.     i = objptr[result].ob_flags;
  56.     if(i & 1)
  57.         boxt[YSELECT].ob_state ^= SELECTED;
  58.     if(i & 2)
  59.         boxt[YDEFAULT].ob_state ^= SELECTED;
  60.     if(i & 4)
  61.         boxt[YEXIT].ob_state ^= SELECTED;
  62.     if(i & 8)
  63.         boxt[YEDITABL].ob_state ^= SELECTED;
  64.     if(i & 16)
  65.         boxt[YRADBUT].ob_state ^= SELECTED;
  66.     if(i & 0x40)
  67.         boxt[YTOUCHEX].ob_state ^= SELECTED;
  68.  
  69.     if(objptr[result].ob_type == G_IBOX)
  70.     {    boxt[YBGUP].ob_state = DISABLED;
  71.         boxt[YBGDWN].ob_state = DISABLED;
  72.         boxt[YFUP].ob_state = DISABLED;
  73.         boxt[YFDWN].ob_state = DISABLED;
  74.     }
  75.     else
  76.     {    boxt[YBGUP].ob_state = NORMAL;
  77.         boxt[YBGDWN].ob_state = NORMAL;
  78.         boxt[YFUP].ob_state = NORMAL;
  79.         boxt[YFDWN].ob_state = NORMAL;
  80.     }
  81. /* now draw the dialog box and process the selected objects    */
  82.         
  83.     form_center(boxt, &cx, &cy, &cw, &ch);
  84.     form_dial(FMD_START, 0, 0, 0, 0, cx, cy, cw, ch);
  85.     objc_draw(boxt, 0, 10, cx, cy, cw, ch);
  86.     button = 0;
  87.     while( (button != YOK) && (button != YCANCEL) ) 
  88.     {    button = form_do(boxt, 0);
  89.         switch (button)
  90.         {
  91.         case YBDUP    :
  92.             strptr = boxt[YBDCOLOR].ob_spec;
  93.             if(cint.part.bdcolor <15)
  94.                 cint.part.bdcolor++;
  95.             sprintf(strptr,"%02d",(int)cint.part.bdcolor);
  96.             boxt[YBDUP].ob_state &= ~SELECTED;
  97.             objc_draw(boxt,YBDBOX,2,cx,cy,cw,ch);
  98.             break;
  99.         case YBDDWN    :
  100.             strptr = boxt[YBDCOLOR].ob_spec;
  101.             if(cint.part.bdcolor >0)
  102.                 cint.part.bdcolor--;
  103.             sprintf(strptr,"%02d",(int)cint.part.bdcolor);
  104.             boxt[YBDDWN].ob_state &= ~SELECTED;
  105.             objc_draw(boxt,YBDBOX,2,cx,cy,cw,ch);
  106.             break;
  107.         case YFDWN    :
  108.             strptr = boxt[YFILL].ob_spec;
  109.             if(cint.part.fillmode >0)
  110.                 cint.part.fillmode--;
  111.             sprintf(strptr,"%02d",(int)cint.part.fillmode);
  112.             boxt[YFDWN].ob_state &= ~SELECTED;
  113.             objc_draw(boxt,YFBOX,2,cx,cy,cw,ch);
  114.             break;
  115.         case YFUP    :
  116.             strptr = boxt[YFILL].ob_spec;
  117.             if(cint.part.fillmode < 7)
  118.                 cint.part.fillmode++;
  119.             sprintf(strptr,"%02d",(int)cint.part.fillmode);
  120.             boxt[YFUP].ob_state &= ~SELECTED;
  121.             objc_draw(boxt,YFBOX,2,cx,cy,cw,ch);
  122.             break;
  123.         case YBGDWN    :
  124.             strptr = boxt[YBGCOLOR].ob_spec;
  125.             if(cint.part.bgcolor >0)
  126.                 cint.part.bgcolor--;
  127.             sprintf(strptr,"%02d",(int)cint.part.bgcolor);
  128.             boxt[YBGDWN].ob_state &= ~SELECTED;
  129.             objc_draw(boxt,YBGBOX,2,cx,cy,cw,ch);
  130.             break;
  131.         case YBGUP    :
  132.             strptr = boxt[YBGCOLOR].ob_spec;
  133.             if(cint.part.bgcolor < 15)
  134.                 cint.part.bgcolor++;
  135.             sprintf(strptr,"%02d",(int)cint.part.bgcolor);
  136.             boxt[YBGUP].ob_state &= ~SELECTED;
  137.             objc_draw(boxt,YBGBOX,2,cx,cy,cw,ch);
  138.             break;
  139.         case YLUP    :
  140.             strptr = boxt[YLINE].ob_spec;
  141.             if(thick < 25)
  142.                 thick += 1;
  143.             sprintf(strptr,"%4d",thick);
  144.             boxt[YLUP].ob_state &= ~SELECTED;
  145.             objc_draw(boxt,YLBOX,2,cx,cy,cw,ch);
  146.             break;
  147.         case YLDWN    :
  148.             strptr = boxt[YLINE].ob_spec;
  149.             if(thick > -25)
  150.                 thick -= 1;
  151.             sprintf(strptr,"%4d",thick);
  152.             boxt[YLDWN].ob_state &= ~SELECTED;
  153.             objc_draw(boxt,YLBOX,2,cx,cy,cw,ch);
  154.             break;
  155.         }
  156.     strptr = boxt[YBDCOLOR].ob_spec;
  157.     cint.part.bdcolor = atoi(strptr);
  158.  
  159.  
  160.     strptr = boxt[YLINE].ob_spec;
  161.     sscanf(strptr,"%d",&thick);
  162.     sthick = thick & 0x00FF;
  163.     lthick = ((long)sthick) << 16;
  164.  
  165.     lcint = cint.whole;
  166.     lcint &= 0x0000FFFFL;
  167.     lob_spec = 0L;
  168.     lob_spec |= lthick;
  169.     lob_spec |= lcint;
  170.  
  171.     nstate = (boxt[YCROSS].ob_state & 1)*2
  172.                 + (boxt[YCHECKED].ob_state & 1)*4
  173.                 + (boxt[YDISABLE].ob_state & 1)*8
  174.                 + (boxt[YOUTLINE].ob_state & 1)*16
  175.                 + (boxt[YSHADOW].ob_state & 1)*32;
  176.  
  177.     nflag =    (boxt[YSELECT].ob_state & 1)
  178.                 + (boxt[YDEFAULT].ob_state & 1)*2
  179.                 + (boxt[YEXIT].ob_state & 1)*4
  180.                 + (boxt[YEDITABL].ob_state & 1)*8
  181.                 + (boxt[YRADBUT].ob_state & 1)*16
  182.                 + (boxt[YTOUCHEX].ob_state & 1)*0x40;
  183.  
  184.     boxt[YEXAMPLE].ob_spec = (char *)lob_spec;
  185.     objc_draw(boxt,YEXBOX,2,cx,cy,cw,ch);
  186.  
  187.     }
  188.         form_dial(FMD_FINISH, 0, 0, 0, 0, cx, cy, cw, ch);
  189.  
  190.     if (button == YCANCEL)
  191.         return;
  192.     
  193.     objptr[result].ob_spec = (char *)lob_spec;
  194.  
  195.     objptr[result].ob_state = nstate;
  196.  
  197.     objptr[result].ob_flags = nflag;
  198.     
  199.  
  200. }
  201.  
  202.  
  203. do_boxct(result)
  204.     int result;
  205. {
  206.     OBJECT    *objptr;
  207.     int i, button, nstate, nflag;
  208.     char *strptr, *chptr;
  209.     COLORINT cint;
  210.     int cx, cy, cw, ch;  /* dialog box dimensions  */
  211.     long lcint, lob_spec, lthick;
  212.     TEDINFO *tiptr1;
  213.     int thick, sthick;
  214.  
  215.     objptr = thefrontwin->inwindow->objt;
  216.     boxct[XEXAMPLE].ob_spec = objptr[result].ob_spec;
  217.  
  218. /* chptr points a 2 char string. Point the boxct tedinfo string to it.    */
  219.  
  220.     tiptr1 = (TEDINFO *)boxct[XBOXCHAR].ob_spec;
  221.  
  222.     chptr = " ";
  223.     tiptr1->te_ptext = chptr;
  224.     tiptr1->te_txtlen = 2;
  225.     tiptr1->te_tmplen = 2;
  226.  
  227. /* copy the boxchar to the string    */
  228.  
  229.     lob_spec = (long)objptr[result].ob_spec;
  230.     chptr[0] = (char)(lob_spec >> 24);
  231.  
  232. /* deselect selectable objects in the boxct dialog box    */
  233.  
  234.     for(i=0;i<15;i++)
  235.         boxct[i].ob_state &= ~SELECTED;
  236.  
  237.     cint.whole = (int)(lob_spec & 0xFFFFL);
  238.     thick = (int)((lob_spec  >> 16) & 0x00FF);
  239. /*    if a negative one byte number then sign extend    */
  240.     if(thick & 0x80)
  241.         thick |= 0xFF00;
  242.  
  243.     strptr = boxct[XLINE].ob_spec;
  244.     sprintf(strptr,"%4d",thick);
  245.     strptr = boxct[XBDCOLOR].ob_spec;
  246.     sprintf(strptr,"%02d",(int)cint.part.bdcolor);
  247.     strptr = boxct[XFILL].ob_spec;
  248.     sprintf(strptr,"%02d",(int)cint.part.fillmode);
  249.     strptr = boxct[XBGCOLOR].ob_spec;
  250.     sprintf(strptr,"%02d",(int)cint.part.bgcolor);
  251.     strptr = boxct[XTCOLOR].ob_spec;
  252.     sprintf(strptr,"%02d",(int)cint.part.tcolor);
  253.     if((int)cint.part.wrmode)
  254.     {    boxct[XMR].ob_state |= SELECTED;
  255.         boxct[XMT].ob_state &= ~SELECTED;
  256.     }
  257.     else
  258.     {    boxct[XMT].ob_state |= SELECTED;
  259.         boxct[XMR].ob_state &= ~SELECTED;
  260.     }
  261.  
  262.     i = objptr[result].ob_state;
  263.     if(i & 2)
  264.         boxct[XCROSS].ob_state ^= SELECTED;
  265.     if(i & 4)
  266.         boxct[XCHECKED].ob_state ^= SELECTED;
  267.     if(i & 8)
  268.         boxct[XDISABLE].ob_state ^= SELECTED;
  269.     if(i & 16)
  270.         boxct[XOUTLINE].ob_state ^= SELECTED;
  271.     if(i & 32)
  272.         boxct[XSHADOW].ob_state ^= SELECTED;
  273.     
  274.     i = objptr[result].ob_flags;
  275.     if(i & 1)
  276.         boxct[XSELECT].ob_state ^= SELECTED;
  277.     if(i & 2)
  278.         boxct[XDEFAULT].ob_state ^= SELECTED;
  279.     if(i & 4)
  280.         boxct[XEXIT].ob_state ^= SELECTED;
  281.     if(i & 8)
  282.         boxct[XEDITABL].ob_state ^= SELECTED;
  283.     if(i & 16)
  284.         boxct[XRADBUT].ob_state ^= SELECTED;
  285.     if(i & 0x40)
  286.         boxct[XTOUCHEX].ob_state ^= SELECTED;
  287.  
  288. /* now draw the dialog box and process the selected objects    */
  289.         
  290.     form_center(boxct, &cx, &cy, &cw, &ch);
  291.     form_dial(FMD_START, 0, 0, 0, 0, cx, cy, cw, ch);
  292.     objc_draw(boxct, 0, 10, cx, cy, cw, ch);
  293.     button = 0;
  294.     while( (button != XOK) && (button != XCANCEL) ) 
  295.     {    button = form_do(boxct, 0);
  296.         switch (button)
  297.         {
  298.         case XBDUP    :
  299.             strptr = boxct[XBDCOLOR].ob_spec;
  300.             if(cint.part.bdcolor <15)
  301.                 cint.part.bdcolor++;
  302.             sprintf(strptr,"%02d",(int)cint.part.bdcolor);
  303.             boxct[XBDUP].ob_state &= ~SELECTED;
  304.             objc_draw(boxct,XBDBOX,2,cx,cy,cw,ch);
  305.             break;
  306.         case XBDDWN    :
  307.             strptr = boxct[XBDCOLOR].ob_spec;
  308.             if(cint.part.bdcolor >0)
  309.                 cint.part.bdcolor--;
  310.             sprintf(strptr,"%02d",(int)cint.part.bdcolor);
  311.             boxct[XBDDWN].ob_state &= ~SELECTED;
  312.             objc_draw(boxct,XBDBOX,2,cx,cy,cw,ch);
  313.             break;
  314.         case XFDWN    :
  315.             strptr = boxct[XFILL].ob_spec;
  316.             if(cint.part.fillmode >0)
  317.                 cint.part.fillmode--;
  318.             sprintf(strptr,"%02d",(int)cint.part.fillmode);
  319.             boxct[XFDWN].ob_state &= ~SELECTED;
  320.             objc_draw(boxct,XFBOX,2,cx,cy,cw,ch);
  321.             break;
  322.         case XFUP    :
  323.             strptr = boxct[XFILL].ob_spec;
  324.             if(cint.part.fillmode < 7)
  325.                 cint.part.fillmode++;
  326.             sprintf(strptr,"%02d",(int)cint.part.fillmode);
  327.             boxct[XFUP].ob_state &= ~SELECTED;
  328.             objc_draw(boxct,XFBOX,2,cx,cy,cw,ch);
  329.             break;
  330.         case XBGDWN    :
  331.             strptr = boxct[XBGCOLOR].ob_spec;
  332.             if(cint.part.bgcolor >0)
  333.                 cint.part.bgcolor--;
  334.             sprintf(strptr,"%02d",(int)cint.part.bgcolor);
  335.             boxct[XBGDWN].ob_state &= ~SELECTED;
  336.             objc_draw(boxct,XBGBOX,2,cx,cy,cw,ch);
  337.             break;
  338.         case XBGUP    :
  339.             strptr = boxct[XBGCOLOR].ob_spec;
  340.             if(cint.part.bgcolor < 15)
  341.                 cint.part.bgcolor++;
  342.             sprintf(strptr,"%02d",(int)cint.part.bgcolor);
  343.             boxct[XBGUP].ob_state &= ~SELECTED;
  344.             objc_draw(boxct,XBGBOX,2,cx,cy,cw,ch);
  345.             break;
  346.         case XTDWN    :
  347.             strptr = boxct[XTCOLOR].ob_spec;
  348.             if(cint.part.tcolor >0)
  349.                 cint.part.tcolor--;
  350.             sprintf(strptr,"%02d",(int)cint.part.tcolor);
  351.             boxct[XTDWN].ob_state &= ~SELECTED;
  352.             objc_draw(boxct,XTBOX,2,cx,cy,cw,ch);
  353.             break;
  354.         case XTUP    :
  355.             strptr = boxct[XTCOLOR].ob_spec;
  356.             if(cint.part.tcolor < 15)
  357.                 cint.part.tcolor++;
  358.             sprintf(strptr,"%02d",(int)cint.part.tcolor);
  359.             boxct[XTUP].ob_state &= ~SELECTED;
  360.             objc_draw(boxct,XTBOX,2,cx,cy,cw,ch);
  361.             break;
  362.         case XLUP    :
  363.             strptr = boxct[XLINE].ob_spec;
  364.             if(thick < 25)
  365.                 thick += 1;
  366.             sprintf(strptr,"%4d",thick);
  367.             boxct[YLUP].ob_state &= ~SELECTED;
  368.             objc_draw(boxct,XLBOX,2,cx,cy,cw,ch);
  369.             break;
  370.         case XLDWN    :
  371.             strptr = boxct[XLINE].ob_spec;
  372.             if(thick > -25)
  373.                 thick -= 1;
  374.             sprintf(strptr,"%4d",thick);
  375.             boxct[XLDWN].ob_state &= ~SELECTED;
  376.             objc_draw(boxct,XLBOX,2,cx,cy,cw,ch);
  377.             break;
  378.         }
  379.  
  380.     strptr = boxct[XBDCOLOR].ob_spec;
  381.     cint.part.bdcolor = atoi(strptr);
  382.  
  383.     strptr = boxct[XFILL].ob_spec;
  384.     cint.part.fillmode = atoi(strptr);
  385.     strptr = boxct[XBGCOLOR].ob_spec;
  386.     cint.part.bgcolor = atoi(strptr);
  387.     strptr = boxct[XTCOLOR].ob_spec;
  388.     cint.part.tcolor = atoi(strptr);
  389.  
  390.     if(boxct[XMR].ob_state & SELECTED)
  391.         cint.part.wrmode = 1;
  392.     else
  393.         cint.part.wrmode = 0;
  394.  
  395.     strptr = boxct[XLINE].ob_spec;
  396.     sscanf(strptr,"%d",&thick);
  397.     sthick = thick & 0x00FF;
  398.     lthick = ((long)sthick) << 16;
  399.  
  400.     lcint = cint.whole;
  401.     lcint &= 0x0000FFFFL;
  402.     lob_spec = chptr[0];
  403.     lob_spec = lob_spec << 24;
  404.     lob_spec |= lthick;
  405.     lob_spec |= lcint;
  406.  
  407.     nstate = (boxct[XCROSS].ob_state & 1)*2
  408.                 + (boxct[XCHECKED].ob_state & 1)*4
  409.                 + (boxct[XDISABLE].ob_state & 1)*8
  410.                 + (boxct[XOUTLINE].ob_state & 1)*16
  411.                 + (boxct[XSHADOW].ob_state & 1)*32;
  412.  
  413.     nflag =    (boxct[XSELECT].ob_state & 1)
  414.                 + (boxct[XDEFAULT].ob_state & 1)*2
  415.                 + (boxct[XEXIT].ob_state & 1)*4
  416.                 + (boxct[XEDITABL].ob_state & 1)*8
  417.                 + (boxct[XRADBUT].ob_state & 1)*16
  418.                 + (boxct[XTOUCHEX].ob_state & 1)*0x40;
  419.  
  420.     boxct[XEXAMPLE].ob_spec = (char *)lob_spec;
  421.     objc_draw(boxct,XEXBOX,2,cx,cy,cw,ch);
  422.     }
  423.         form_dial(FMD_FINISH, 0, 0, 0, 0, cx, cy, cw, ch);
  424.  
  425.     if (button == XCANCEL)
  426.         return;
  427.  
  428.     objptr[result].ob_spec = (char *)lob_spec;
  429.  
  430.     objptr[result].ob_state = nstate;
  431.  
  432.     objptr[result].ob_flags = nflag;
  433.     
  434. }
  435.